non linear constrained optimization python